{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 大数据基础 - 上机实验\n",
    "\n",
    "### Course ID: UG_BGD_2024"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下方填写姓名和学号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Student_name = \"李卓\"\n",
    "Student_id = \"2335040120\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在`YOUR CODE HERE`及 \"YOUR ANSWER HERE\" 标注的位置补全代码。  \n",
    "作业提交后由程序自动评分，提交前应执行“Validate”进行代码自检"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作业提交操作教程（首次作业需观看）：[https://www.bilibili.com/video/BV1dH4y1X7QG](https://www.bilibili.com/video/BV1dH4y1X7QG)\n",
    "\n",
    "作业提交网站：http://quiz.zhangys.org.cn\n",
    "\n",
    "登陆用户名：学号  \n",
    "**初始登陆密码为空，首次登陆后必须更改密码（不能与学号相同），否则无法下载题目和提交作业**  \n",
    "**不要修改文件名，提交的作业文件必须与题目文件同名，否则将影响机判**  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "鼓励学习交流，严禁照搬抄袭。  \n",
    "Peer review is encouraged; plagiarism is PROHIBITED.  \n",
    "如发现雷同作业，则抄袭者和被抄袭者当次作业均判为0分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "markdown",
     "checksum": "17e70c42a3d13bbfecba3dc904853ae7",
     "grade": false,
     "grade_id": "cell-5e007d5d3101423a",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "## 预备知识 - PyTorch库的使用\n",
    "\n",
    "练习(1分)：完成函数matrix_sum()，对矩阵所有元素求平方和，元素均为整数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "2750ebd080ef435bff0957da938b2275",
     "grade": false,
     "grade_id": "cell-06f5065e9b03bf2c",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "def matrix_sum(X): # X 为一个torch二维矩阵对象，其中元素为整数\n",
    "    return torch.sum(X.view(-1)**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "1163c0d5c1816c001d25a3525fc647f6",
     "grade": true,
     "grade_id": "cell-34d768d01d67c53d",
     "locked": true,
     "points": 1,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "X = torch.tensor([[1,2,3], [2,3,-1]])\n",
    "assert matrix_sum(X) == 28\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "markdown",
     "checksum": "5f6177d0179373e034bbfc65b68a4bab",
     "grade": false,
     "grade_id": "cell-a1de6534713cd133",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "练习(1分)：完成函数matrix_sum()，对Numpy矩阵所有负数元素求平方和，矩阵元素均为整数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "dbe738492eb20e993ecf73261c89ea55",
     "grade": false,
     "grade_id": "cell-063c9f99bc568977",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def matrix_sum(X): # X 为一个torch二维矩阵对象，其中元素为整数\n",
    "    # 找出所有负数元素\n",
    "    negative_elements = X[X < 0]\n",
    "    # 对这些负数元素求平方\n",
    "    squared_negative_elements = negative_elements ** 2\n",
    "    # 计算平方和\n",
    "    sum_of_squares = torch.sum(squared_negative_elements)\n",
    "    return sum_of_squares"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "22bceb9ee1a8efcae90f166d5d4a8bd9",
     "grade": true,
     "grade_id": "cell-0e5478698fb72104",
     "locked": true,
     "points": 1,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "X = torch.tensor([[1,2,3], [-2,3,-1]])\n",
    "assert matrix_sum(X) == 5\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic regression 逻辑回归\n",
    "\n",
    "提示: 注意区分矩阵乘法与element-wise乘法（哈达玛积）。\n",
    "\n",
    "## 假设模型$h_\\theta (x)$\n",
    "\n",
    "\n",
    "首先回顾下逻辑回归模型\n",
    "$\n",
    "h_\\theta (x) = g(\\theta ^ T X)\n",
    "$\n",
    ", <br />\n",
    "其中，g是sigmoid函数（又称logistic函数，实为logistic distribution的CDF（cumulative distribution function）），其定义如下：<br />\n",
    "$\n",
    "g(z) = { 1 \\over {1+e^{-z}} }\n",
    "$\n",
    "\n",
    "$\n",
    "g(0) = { 1 \\over 2 }\n",
    "$\n",
    "\n",
    "$\n",
    "g(\\infty) = 1\n",
    "$\n",
    "\n",
    "$\n",
    "g(- \\infty) = 0\n",
    "$\n",
    "\n",
    "首先定义函数sigmoid()。sigmoid函数可以对向量或者矩阵进行操作。如果对矩阵进行操作，函数对矩阵的每一个元素都进行sigmoid操作，返回一个和输入一样大的矩阵。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "4056f6e5cc087711ff1f97dabb95873e",
     "grade": false,
     "grade_id": "cell-288aa9289f4a5b6c",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    return torch.sigmoid(z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "af4554320fa7717282ca38f75186b72f",
     "grade": true,
     "grade_id": "cell-1df11c8bfea1a749",
     "locked": true,
     "points": 2,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "assert sigmoid(torch.tensor(0)) == 0.5\n",
    "assert sigmoid(torch.tensor(torch.inf)) == 1\n",
    "assert all (sigmoid(torch.tensor(([0, torch.inf]))) == torch.tensor(([0.5, 1.])))\n",
    "assert sigmoid(torch.tensor(-torch.inf)) == 0"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制sigmoid函数，应该得到这样的图形：\n",
    "\n",
    "\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1cb9dee9d10>]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7gyJOW9C6Xg51uAVSsfLsQavUDley7J0+PBhtWnTptIkuicLiJ6R8PBwnXnmmV57/9jY2KD+n+FkoXS8HGvwCqXj5ViDVygcb209Ii4MYAUAAEYRRgAAgFEhHUaio6M1ZcoURUdHmy7FJ0LpeDnW4BVKx8uxBq9QO95TCYgBrAAAIHiFdM8IAAAwjzACAACMIowAAACjCCMAAMCooA8jDzzwgPr06aMmTZqoefPm1W6zY8cODRo0SE2aNFF8fLwmTJigsrKyWt/34MGDuuGGGxQbG6vmzZtr9OjROnLkiBeOoH5WrlypsLCwapfPPvusxv1+9atfVdl+7NixPqy8/tq3b1+l9oceeqjWfY4dO6aMjAy1atVKTZs21W9/+1sVFBT4qOL62b59u0aPHq0OHTqocePG6tSpk6ZMmaLS0tJa9wukcztr1iy1b99eMTExSklJ0dq1a2vd/tVXX1XXrl0VExOj888/X0uXLvVRpfWXnZ2tiy66SM2aNVN8fLyGDh2qzZs317rPggULqpzDmJgYH1Vcf3/729+q1N21a9da9wnEc+pS3c+isLAwZWRkVLt9oJ5XTwr6MFJaWqprr71Wt912W7XfdzgcGjRokEpLS7V69Wo9//zzWrBggSZPnlzr+95www36+uuvtWLFCr3zzjv6+OOPdcstt3jjEOqlT58+2rt3b6Xl5ptvVocOHXThhRfWuu+YMWMq7Tdt2jQfVd1w999/f6Xa77jjjlq3Hz9+vBYvXqxXX31VH330kfbs2aPf/OY3Pqq2fjZt2iSn06lnnnlGX3/9tR577DHNnj1b99xzzyn3DYRzu2jRImVmZmrKlClav369evToofT0dO3bt6/a7VevXq3hw4dr9OjR+vzzzzV06FANHTpUX331lY8rd89HH32kjIwMffrpp1qxYoWOHz+u/v37q7i4uNb9YmNjK53D77//3kcVN8x5551Xqe5Vq1bVuG2gnlOXzz77rNKxrlixQpJ07bXX1rhPoJ5Xj7FCxPz58624uLgq65cuXWqFh4db+fn55euefvppKzY21iopKan2vb755htLkvXZZ5+Vr3v33XetsLAwa/fu3R6v3RNKS0ut008/3br//vtr3a5v377WuHHjfFOUh5111lnWY489VuftDx06ZEVGRlqvvvpq+bqNGzdakqzc3FwvVOg906ZNszp06FDrNoFybpOTk62MjIzy1w6Hw2rTpo2VnZ1d7fa///3vrUGDBlVal5KSYt16661erdPT9u3bZ0myPvrooxq3qennmL+bMmWK1aNHjzpvHyzn1GXcuHFWp06dLKfTWe33A/W8elLQ94ycSm5urs4//3wlJCSUr0tPT1dRUZG+/vrrGvdp3rx5pR6GtLQ0hYeHa82aNV6vuT7efvtt/fDDDxo1atQpt33xxRfVunVrde/eXVlZWTp69KgPKvSMhx56SK1atVKvXr30yCOP1Hq5LS8vT8ePH1daWlr5uq5du6pdu3bKzc31RbkeU1hYqJYtW55yO38/t6WlpcrLy6t0TsLDw5WWllbjOcnNza20vWT/Gw7EcyjplOfxyJEjOuuss5SUlKSrr766xp9T/ub//u//1KZNG3Xs2FE33HCDduzYUeO2wXJOJfv/6RdeeEF//OMfa53oNVDPq6cExER53pSfn18piEgqf52fn1/jPvHx8ZXWNWrUSC1btqxxH9Pmzp2r9PT0U044eP311+uss85SmzZt9MUXX2jixInavHmzXn/9dR9VWn9//vOf9Ytf/EItW7bU6tWrlZWVpb1792rGjBnVbp+fn6+oqKgqY4kSEhL89jxWZ+vWrXriiSc0ffr0WrcLhHN74MABORyOav9Nbtq0qdp9avo3HEjn0Ol06s4779TFF1+s7t2717hdly5dNG/ePF1wwQUqLCzU9OnT1adPH3399ddenUy0oVJSUrRgwQJ16dJFe/fu1dSpU3XppZfqq6++UrNmzapsHwzn1OXNN9/UoUOHdNNNN9W4TaCeV48y3TVTHxMnTrQk1bps3Lix0j41dYONGTPG6t+/f6V1xcXFliRr6dKl1X7+Aw88YJ1zzjlV1p9++unWU089Vf8Dq4P6HPvOnTut8PBw67XXXnP783JycixJ1tatWz11CG6pz/G6zJ0712rUqJF17Nixar//4osvWlFRUVXWX3TRRdbdd9/t0eOoi/oc665du6xOnTpZo0ePdvvzTJ/b6uzevduSZK1evbrS+gkTJljJycnV7hMZGWktXLiw0rpZs2ZZ8fHxXqvT08aOHWudddZZ1s6dO93ar7S01OrUqZN17733eqky7/jxxx+t2NhY67nnnqv2+8FwTl369+9vDR482K19AvW8NkRA9ozcddddtaZMSerYsWOd3isxMbHKSH3X3RSJiYk17nPyYLqysjIdPHiwxn08pT7HPn/+fLVq1UpXXXWV25+XkpIiyf7ru1OnTm7v31ANOdcpKSkqKyvT9u3b1aVLlyrfT0xMVGlpqQ4dOlSpd6SgoMDr57E67h7rnj171K9fP/Xp00dz5sxx+/NMn9vqtG7dWhEREVXuaKrtnCQmJrq1vb/505/+VD4I3t2/giMjI9WrVy9t3brVS9V5R/PmzXXOOefUWHegn1OX77//Xu+//77bvY+Bel4bxHQa8pVTDWAtKCgoX/fMM89YsbGxNf5F7RrAum7duvJ1y5cv98sBrE6n0+rQoYN111131Wv/VatWWZKs//3vfx6uzPteeOEFKzw83Dp48GC133cNYD2xx2jTpk0BMYB1165dVufOna3rrrvOKisrq9d7+Ou5TU5Otv70pz+Vv3Y4HFbbtm1rHcB68l+eqampfj/Y0el0WhkZGVabNm2sLVu21Os9ysrKrC5duljjx4/3cHXedfjwYatFixbW448/Xu33A/WcnmzKlClWYmKidfz4cbf2C9Tz2hBBH0a+//576/PPP7emTp1qNW3a1Pr888+tzz//3Dp8+LBlWfZJ7969u9W/f39rw4YN1rJly6zTTz/dysrKKn+PNWvWWF26dLF27dpVvm7AgAFWr169rDVr1lirVq2yOnfubA0fPtznx3cq77//fo2XMnbt2mV16dLFWrNmjWVZlrV161br/vvvt9atW2dt27bNeuutt6yOHTtal112ma/Ldtvq1autxx57zNqwYYP17bffWi+88IJ1+umnWyNGjCjf5uTjtSy7e7xdu3bWBx98YK1bt85KTU21UlNTTRxCne3atcs6++yzrcsvv9zatWuXtXfv3vLlxG0C9dy+/PLLVnR0tLVgwQLrm2++sW655RarefPm5Xe83XjjjdakSZPKt//kk0+sRo0aWdOnT7c2btxoTZkyxYqMjLS+/PJLU4dQJ7fddpsVFxdnrVy5stI5PHr0aPk2Jx/r1KlTreXLl1vffvutlZeXZ1133XVWTEyM9fXXX5s4hDq76667rJUrV1rbtm2zPvnkEystLc1q3bq1tW/fPsuyguecnsjhcFjt2rWzJk6cWOV7wXJePSnow8jIkSOrvfb+4Ycflm+zfft268orr7QaN25stW7d2rrrrrsqJdkPP/zQkmRt27atfN0PP/xgDR8+3GratKkVGxtrjRo1qjzg+JPhw4dbffr0qfZ727Ztq/TfYseOHdZll11mtWzZ0oqOjrbOPvtsa8KECVZhYaEPK66fvLw8KyUlxYqLi7NiYmKsbt26WQ8++GCl3q2Tj9eyLOunn36ybr/9dqtFixZWkyZNrGuuuabSL3V/NH/+/BrHlLgE+rl94oknrHbt2llRUVFWcnKy9emnn5Z/r2/fvtbIkSMrbf/KK69Y55xzjhUVFWWdd9551pIlS3xcsftqOofz588v3+bkY73zzjvL/7skJCRYAwcOtNavX+/74t00bNgw64wzzrCioqKstm3bWsOGDas0VilYzumJli9fbkmyNm/eXOV7wXJePSnMsizLR1eEAAAAqgj554wAAACzCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACM+n8I1Sglt089mAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "nums = torch.arange(-10, 10, 1)\n",
    "plt.plot(nums, sigmoid(nums), 'r')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 案例分析\n",
    "目前有一个植物样本数据集，该植物数据集包含两种植物，数据集每一行代表一个植物样本，数据集第一列表示该植物的花萼长度，第二列表示植物的花瓣宽度，第三列表示植物的种类（分别用0和1表示）。你需要建立一个逻辑回归分类器，通过数据集中的两个指标（花萼长度和花瓣宽度），确定每个样本属于第一类植物（0）还是第二类植物（1）。\n",
    "\n",
    "分析数据前首先对数据进行可视化。从iris data.csv中加载数据，并在2D平面上以散点图的形式画出。 这个图的横坐标和纵坐标是花萼长度和花瓣宽度，而植物的种类由不同颜色/样式的点来表示。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     SepalLength  PetalWidth\n",
      "0            5.1         0.2\n",
      "1            4.9         0.2\n",
      "2            4.7         0.2\n",
      "3            4.6         0.2\n",
      "4            5.0         0.2\n",
      "..           ...         ...\n",
      "98           5.7         1.2\n",
      "99           5.7         1.3\n",
      "100          6.2         1.3\n",
      "101          5.1         1.1\n",
      "102          5.7         1.3\n",
      "\n",
      "[103 rows x 2 columns]\n",
      "0      0\n",
      "1      0\n",
      "2      0\n",
      "3      0\n",
      "4      0\n",
      "      ..\n",
      "98     1\n",
      "99     1\n",
      "100    1\n",
      "101    1\n",
      "102    1\n",
      "Name: type, Length: 103, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "data=pd.read_csv(\"flower.csv\")\n",
    "data_x=data.iloc[:,:-1]\n",
    "data_y=data.iloc[:,-1]\n",
    "print(data_x)\n",
    "print(data_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "type1 = data_x.loc[data_y == 0]\n",
    "type2 = data_x.loc[data_y == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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efPm8PX1NVonKirK5Hb9/f0REhJi8CAPVlQE9O8PnDsHxMcDeXnS87lzUrmpy4hr5ecDvXsDNTWAWg2sXi0919RI5aYukSfj7P08lBKDp+wHkbew5tza/Pnzxb59+0SVAy6hhIWDoB966CGDsjFjxjQYBD1jxgz9a61WK1q2bMlB0CThVWDKooQrl3gVGJHHcNgg6NatWwuVSiUCAwPFI488Il599VWRm5sr7t69a1OgFRUV4ujRo+Lo0aMCgFi2bJk4evSo+OWXX4QQQsyZM0ekpaXp69deBv/iiy+KkydPilWrVhm9DN7f31+sW7dO/Pjjj+LZZ58VYWFhBnMWNYYJkIfiPEDKooS5azgPEJFHcehVYAUFBWLNmjVi3LhxIi4uTqhUKhEcHCwGDhwo3njjDasmHdy7d68A0OAxfvx4IYQQ48ePF/369WuwTufOnYVGoxHx8fFGJ0J85513RKtWrYRGoxE9evQQB6383zgTIA+WlSUdAEz9L7iwUFqelWV8+cyZUnJj6jt18KC0fOZMeeL1dPZ+HkqJwVP2g8jNWXP8VglR55buNigoKMDevXuRk5ODbdu24ebNm6ipqbFnky5XXl6O0NBQlJWVcTyQJ+K9wJRFCfev4r3AiDyCNcdvm+4FVuuXX37B119/jX379uHrr7/G3bt30bdvX3s2SeR4jR0AGlveWHLD5Mc69n4eSonBU/aDyEtYdTf4wsJC5OTk6Ht8rly5gp49e6Jfv36YPHkyevToAQ3/wIiIiEjhrEqAWrdujVatWmHq1KmYOnUqunXrBl9fX0fFRkREROQQVp0CGzlyJKqqqvDmm2/itddew1tvvYUjR47AzmFERERERE5l0yDon376SX8abN++fbhz5w569+6Nfv36oX///vjd737niFidhoOgiYiI3I81x2+7rwIDgB9//BGbNm3CO++8w6vAiIiIyCWsOX5bNQaortLSUuTk5OgHRf/888/w9/dHnz59bN0kERERkVNYlQD9+9//1ic9p06dgp+fH373u99h5MiRePjhh9GzZ0/4+/s7KlYiIiIiWViVAD311FPo3r07hg4diocffhi9evVCYGCgo2IjIiIicgirEqDr16/jvvvuc1QsRERERE5hcQJUXl5u8GwOBw4TERGRklmcAIWFhUGlUpmtI4SASqWCVqu1OzAiIiIiR7E4Adq7d68j4yAiIiJyGosToH79+jkyDiIiIiKnsXkeIAC4desWCgsLUV1dbVDesWNHu4IiIiIiciSbEqBff/0VEydOxM6dO40u5xggIiIiUjKrboZa67nnnsONGzeQn5+PwMBA7Nq1C+vXr0dCQgK2b98ud4xEREREsrKpB+irr77Ctm3b0L17d/j4+CAuLg4DBgxASEgIFi9ejCFDhsgdJxEREZFsbOoBunnzJiIiIgAATZs2xa+//goA6NChA44cOSJfdEREREQOYFMC1KZNG5w6dQoA0KlTJ7z77ru4ePEiVq9ejejoaFkDJCIiIpKbTafAZs2aheLiYgDAggULMGjQIGzcuBEajQbr1q2TMz4iIiIi2amEEMLejdy6dQs//fQTWrVqhebNm8sRl0uVl5cjNDQUZWVlvK0HERGRm7Dm+G3TKbBXXnkFt27d0r8OCgpC165dcd999+GVV16xZZNERERETmNTD5Cvry+Ki4v1A6FrXb16FREREW4/DxB7gIiIiNyPw3uAam96Wt/x48cRHh5uyyaJiIiInMaqQdBNmzaFSqWCSqVCYmKiQRKk1WpRWVmJKVOmyB4kERERkZysSoDeeustCCHw9NNPY9GiRQgNDdUv02g0aN26NZKTk2UPkoiIiEhOViVA48ePBwD89re/Ra9evaBW23UvVSIiIiKXsGkMUL9+/fDLL79g3rx5GDNmDC5fvgwA2LlzJ3744QdZAyQiIiKSm00J0L59+9ChQwfk5+dj8+bNqKysBCANgl6wYIGsARIRERHJzaYEaM6cOXjttdfw3//+FxqNRl/+yCOP4ODBg7IFR0REROQINiVAJ06cwNChQxuUR0RE4MqVK3YHRURERORINiVAYWFh+nuB1XX06FG0bNnS7qCIiIiIHMmmBGj06NF46aWXUFJSApVKBZ1Oh7y8PMyePRvjxo2TO0YiIiIiWdmUAP39739H27Zt0apVK1RWVqJdu3bo27cvevbsiXnz5skdIxEREZGsrJrIR6fT4R//+Ae2b9+O6upqpKWlYfjw4aisrESXLl2QkJDgqDiJiIiIZGNVAvT6669j4cKFSElJQWBgIDZt2gQhBNasWeOo+IiIiIhkZ9UpsA8//BAZGRn44osvsHXrVuzYsQMbN26ETqdzVHxEREREsrMqASosLMRjjz2mf52SkgKVSoVLly7JHhgRERGR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IrIOT4ERERGR12ECRERERF6HCRARERF5HSZARERE5HWYABEREZHXYQJEREREXocJEBEREXkdJkBERETkdTgRohG1k2OXl5e7OBIiIiKyVO1x25KbXDABMqKiogIAEBsb6+JIiIiIyFoVFRUIDQ01W4f3AjNCp9Ph0qVLaNKkCVQqlavDkV15eTliY2NRVFQk+73OvA3bUl5sT/mwLeXF9pSPI9tSCIGKigrExMTAx8f8KB/2ABnh4+OD3/zmN64Ow+FCQkL4hywTtqW82J7yYVvKi+0pH0e1ZWM9P7U4CJqIiIi8DhMgIiIi8jpMgLyQv78/FixYAH9/f1eH4vbYlvJie8qHbSkvtqd8lNKWHARNREREXoc9QEREROR1mAARERGR12ECRERERF6HCRARERF5HSZAHu6NN96ASqXCc889Z7LOunXroFKpDB4BAQHOC1LBFi5c2KBtHnzwQbPrfPLJJ3jwwQcREBCADh064PPPP3dStMpmbVvye2nexYsX8dRTT6FZs2YIDAxEhw4d8N1335ldJycnB127doW/vz8eeOABrFu3zjnBugFr2zMnJ6fB91OlUqGkpMSJUStT69atjbbN9OnTTa7jit9NzgTtwb799lu8++676NixY6N1Q0JCcOrUKf1rT7wFiK3at2+P3bt361+r1ab/bL755huMGTMGixcvxuOPP45NmzbhySefxJEjR/DQQw85I1xFs6YtAX4vTbl+/Tp69eqFhx9+GDt37kSLFi1w+vRpNG3a1OQ6BQUFGDJkCKZMmYKNGzdiz549mDRpEqKjozFw4EAnRq88trRnrVOnThnMZhwREeHIUN3Ct99+C61Wq3/9/fffY8CAARgxYoTR+i773RTkkSoqKkRCQoL473//K/r16ydmzZplsu7atWtFaGio02JzJwsWLBCdOnWyuP7IkSPFkCFDDMqSkpLEn//8Z5kjcz/WtiW/l6a99NJLonfv3lat89e//lW0b9/eoGzUqFFi4MCBcobmlmxpz7179woA4vr1644JyoPMmjVL3H///UKn0xld7qrfTZ4C81DTp0/HkCFDkJKSYlH9yspKxMXFITY2Fqmpqfjhhx8cHKH7OH36NGJiYhAfH4+xY8eisLDQZN0DBw40aPOBAwfiwIEDjg7TLVjTlgC/l6Zs374d3bt3x4gRIxAREYEuXbrgvffeM7sOv5um2dKetTp37ozo6GgMGDAAeXl5Do7U/VRXV+Ojjz7C008/bbIH11XfTSZAHigrKwtHjhzB4sWLLarfpk0brFmzBtu2bcNHH30EnU6Hnj174sKFCw6OVPmSkpKwbt067Nq1C5mZmSgoKECfPn1QUVFhtH5JSQkiIyMNyiIjIzkuANa3Jb+Xpp07dw6ZmZlISEjAF198galTp2LmzJlYv369yXVMfTfLy8tx+/ZtR4esaLa0Z3R0NFavXo3PPvsMn332GWJjY9G/f38cOXLEiZEr39atW3Hjxg1MmDDBZB2X/W46tH+JnK6wsFBERESI48eP68saOwVWX3V1tbj//vvFvHnzHBChe7t+/boICQkR77//vtHlfn5+YtOmTQZlq1atEhEREc4Iz6001pb18Xt5j5+fn0hOTjYo+8tf/iJ+//vfm1wnISFB/P3vfzco+89//iMAiFu3bjkkTndhS3sa07dvX/HUU0/JGZrbe/TRR8Xjjz9uto6rfjfZA+RhDh8+jMuXL6Nr165Qq9VQq9XYt28f3n77bajVaoOBaab4+fmhS5cuOHPmjBMidi9hYWFITEw02TZRUVEoLS01KCstLUVUVJQzwnMrjbVlffxe3hMdHY127doZlLVt29bsKUVT382QkBAEBgY6JE53YUt7GtOjRw9+P+v45ZdfsHv3bkyaNMlsPVf9bjIB8jB/+MMfcOLECRw7dkz/6N69O8aOHYtjx47B19e30W1otVqcOHEC0dHRTojYvVRWVuLs2bMm2yY5ORl79uwxKPvvf/+L5ORkZ4TnVhpry/r4vbynV69eBlfHAcDPP/+MuLg4k+vwu2maLe1pzLFjx/j9rGPt2rWIiIjAkCFDzNZz2XfTof1LpAj1T4GlpaWJOXPm6F8vWrRIfPHFF+Ls2bPi8OHDYvTo0SIgIED88MMPLohWWV544QWRk5MjCgoKRF5enkhJSRHNmzcXly9fFkI0bMu8vDyhVqvF0qVLxcmTJ8WCBQuEn5+fOHHihKt2QTGsbUt+L007dOiQUKvV4vXXXxenT58WGzduFEFBQeKjjz7S15kzZ45IS0vTvz537pwICgoSL774ojh58qRYtWqV8PX1Fbt27XLFLiiKLe25fPlysXXrVnH69Glx4sQJMWvWLOHj4yN2797til1QHK1WK1q1aiVeeumlBsuU8rvJBMgL1E+A+vXrJ8aPH69//dxzz4lWrVoJjUYjIiMjxWOPPSaOHDni/EAVaNSoUSI6OlpoNBrRsmVLMWrUKHHmzBn98vptKYQQ//73v0ViYqLQaDSiffv24j//+Y+To1Yma9uS30vzduzYIR566CHh7+8vHnzwQfGvf/3LYPn48eNFv379DMr27t0rOnfuLDQajYiPjxdr1651XsAKZ217vvnmm+L+++8XAQEBIjw8XPTv31989dVXTo5aub744gsBQJw6darBMqX8bqqEEMKxfUxEREREysIxQEREROR1mAARERGR12ECRERERF6HCRARERF5HSZARERE5HWYABEREZHXYQJEREREXocJEBEREXkdJkBE5JFUKhW2bt3q6jAs4k6xEnkKJkBEJKtff/0VU6dORatWreDv74+oqCgMHDgQeXl5Lo1LCUnGwoUL0blzZ5fGQEQStasDICLPMnz4cFRXV2P9+vWIj49HaWkp9uzZg6tXr7o6NCIiPfYAEZFsbty4gf379+PNN9/Eww8/jLi4OPTo0QNz587FE088oa8zadIktGjRAiEhIXjkkUdw/Phx/TZqe0neffddxMbGIigoCCNHjkRZWZm+zrfffosBAwagefPmCA0NRb9+/XDkyBG7Yn///ffRtm1bBAQE4MEHH0RGRoZ+2fnz56FSqbB582Y8/PDDCAoKQqdOnXDgwAGDbbz33nv6mIcOHYply5YhLCwMALBu3TosWrQIx48fh0qlgkqlwrp16/TrXrlyBUOHDkVQUBASEhKwfft2u/aHiMxjAkREsgkODkZwcDC2bt2Kqqoqo3VGjBiBy5cvY+fOnTh8+DC6du2KP/zhD7h27Zq+zpkzZ/Dvf/8bO3bswK5du3D06FFMmzZNv7yiogLjx49Hbm4uDh48iISEBDz22GOoqKiwKe6NGzdi/vz5eP3113Hy5En8/e9/x8svv4z169cb1Pvb3/6G2bNn49ixY0hMTMSYMWNQU1MDAMjLy8OUKVMwa9YsHDt2DAMGDMDrr7+uX3fUqFF44YUX0L59exQXF6O4uBijRo3SL1+0aBFGjhyJ//3vf3jssccwduxYgzYhIpk5/H7zRORVPv30U9G0aVMREBAgevbsKebOnSuOHz8uhBBi//79IiQkRNy5c8dgnfvvv1+8++67QgghFixYIHx9fcWFCxf0y3fu3Cl8fHxEcXGx0ffUarWiSZMmYseOHfoyAGLLli0mX9d//02bNhmUvfrqqyI5OVkIIURBQYEAIN5//3398h9++EEAECdPnhRCCDFq1CgxZMgQg22MHTtWhIaG6l8vWLBAdOrUqcH7AxDz5s3Tv66srBQAxM6dO43GS0T2Yw8QEclq+PDhuHTpErZv345BgwYhJycHXbt2xbp163D8+HFUVlaiWbNm+t6i4OBgFBQU4OzZs/pttGrVCi1bttS/Tk5Ohk6nw6lTpwAApaWlmDx5MhISEhAaGoqQkBBUVlaisLDQ6nhv3ryJs2fP4plnnjGI6bXXXjOICQA6duyo/3d0dDQA4PLlywCAU6dOoUePHgb16782p+6277vvPoSEhOi3TUTy4yBoIpJdQEAABgwYgAEDBuDll1/GpEmTsGDBAkybNg3R0dHIyclpsE7tWBlLjB8/HlevXsWKFSsQFxcHf39/JCcno7q62upYKysrAUjjd5KSkgyW+fr6Grz28/PT/1ulUgEAdDqd1e9pTN1t125frm0TUUNMgIjI4dq1a4etW7eia9euKCkpgVqtRuvWrU3WLywsxKVLlxATEwMAOHjwIHx8fNCmTRsA0nibjIwMPPbYYwCAoqIiXLlyxabYIiMjERMTg3PnzmHs2LE2bQMA2rRpg2+//dagrP5rjUYDrVZr83sQkXyYABGRbK5evYoRI0bg6aefRseOHdGkSRN89913WLJkCVJTU5GSkoLk5GQ8+eSTWLJkCRITE3Hp0iX85z//wdChQ9G9e3cAUg/S+PHjsXTpUpSXl2PmzJkYOXIkoqKiAAAJCQnYsGEDunfvjvLycrz44osIDAxsNL6CggIcO3bMoCwhIQGLFi3CzJkzERoaikGDBqGqqgrfffcdrl+/jvT0dIv2/S9/+Qv69u2LZcuW4Y9//CO++uor7Ny5U99TBACtW7fWx/Cb3/wGTZo0gb+/v4WtS0SycvUgJCLyHHfu3BFz5swRXbt2FaGhoSIoKEi0adNGzJs3T9y6dUsIIUR5ebn4y1/+ImJiYoSfn5+IjY0VY8eOFYWFhUKIewOFMzIyRExMjAgICBB/+tOfxLVr1/Tvc+TIEdG9e3cREBAgEhISxCeffCLi4uLE8uXL9XVgZBC0scf+/fuFEEJs3LhRdO7cWWg0GtG0aVPRt29fsXnzZiHEvUHQR48e1W/v+vXrAoDYu3evvuxf//qXaNmypQgMDBRPPvmkeO2110RUVJRB+wwfPlyEhYUJAGLt2rVGYxVCiNDQUP1yIpKfSgghXJR7ERE1sHDhQmzdurVBT407mjx5Mn766Sfs37/f1aEQUT08BUZEJJOlS5diwIABuO+++7Bz506sX7/eYEJFIlIOJkBERDI5dOgQlixZgoqKCsTHx+Ptt9/GpEmTXB0WERnBU2BERETkdTgRIhEREXkdJkBERETkdZgAERERkddhAkRERERehwkQEREReR0mQEREROR1mAARERGR12ECRERERF7n/wDuM9QeHiYKvQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 定义数据可视化函数\n",
    "def plotData():\n",
    "    plt.figure()\n",
    "    plt.scatter(type1['SepalLength'], type1['PetalWidth'], s=50, c='b', marker='o', label='type1')\n",
    "    plt.scatter(type2['SepalLength'], type2['PetalWidth'], s=50, c='r', marker='x', label='type2')\n",
    "    plt.legend()\n",
    "    plt.xlabel('SepalLength')\n",
    "    plt.ylabel('PetalWidth')\n",
    "    \n",
    "plotData()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图可以看到较为明显的线性决策边界，下面使用逻辑回归求解该分类问题\n",
    "\n",
    "首先完成自定义的Dataset类，用于数据读取。提示：需要提供`__init__`, `__len__` 和 `__getitem__` 三个函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "47c0327178d5c649f00b86af2a712d99",
     "grade": false,
     "grade_id": "cell-495bf1df49637309",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import torch\n",
    "from torch.utils.data import Dataset\n",
    "\n",
    "class MyDataset(Dataset):\n",
    "    def __init__(self, file_path='flower.csv'):\n",
    "        # 读取 CSV 文件并分割特征和标签\n",
    "        data = pd.read_csv(file_path)\n",
    "        self.X = data.iloc[:, :-1].values  # 特征：花萼长度和花瓣宽度\n",
    "        self.y = data.iloc[:, -1].values.reshape(-1, 1)  # 标签：植物种类，0 或 1\n",
    "\n",
    "    def __len__(self):\n",
    "        # 返回样本的数量\n",
    "        return len(self.y)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        # 获取特定样本及其对应的标签\n",
    "        xi = torch.tensor(self.X[idx], dtype=torch.float32)\n",
    "        yi = torch.tensor(self.y[idx], dtype=torch.float32)\n",
    "        return xi, yi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "34c76c9507ee19e08b3a400a2bb2cf7d",
     "grade": true,
     "grade_id": "cell-727be461929e18fc",
     "locked": true,
     "points": 4,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "dataset = MyDataset()\n",
    "\n",
    "assert len(dataset) == 103\n",
    "assert dataset.X.shape == (103,2)\n",
    "assert dataset.y.shape == (103,1)\n",
    "\n",
    "xi,yi = dataset[0]\n",
    "assert len(xi) == 2\n",
    "assert yi == 0\n",
    "\n",
    "batch_size = 16\n",
    "dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=False)\n",
    "xb, yb = next(iter(dataloader))\n",
    "assert xb.shape == (batch_size,2)\n",
    "assert yb.shape == (batch_size,1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义模型，使用一个linear层 + sigmoid激活"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "98813d69c6a1f0b9368be6d3c40a52f6",
     "grade": false,
     "grade_id": "cell-22e9be6424fe8837",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "\n",
    "class LogisticRegression(nn.Module):\n",
    "    def __init__(self, input_dim, output_dim):\n",
    "        super(LogisticRegression, self).__init__()\n",
    "        # 定义线性层\n",
    "        self.linear = nn.Linear(input_dim, output_dim)\n",
    "\n",
    "    def forward(self, x):\n",
    "        # 前向传播，应用 sigmoid 激活函数\n",
    "        return torch.sigmoid(self.linear(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "35a30bf7c78b2f82d801f79f8c8f3672",
     "grade": true,
     "grade_id": "cell-8587d7f69c010b82",
     "locked": true,
     "points": 3,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "model = LogisticRegression(input_dim = 2, output_dim = 1).to(device)\n",
    "\n",
    "assert list(model.state_dict().keys()) == ['linear.weight', 'linear.bias']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "criterion = nn.BCELoss()\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=1)\n",
    "\n",
    "losses = []\n",
    "for epoch in range(50):\n",
    "\n",
    "    for i, (x, y) in enumerate(dataloader):\n",
    "\n",
    "        x = x.float().to(device)\n",
    "        y = y.float().to(device)\n",
    "\n",
    "        # Forward pass\n",
    "        y_pred = model(x) \n",
    "        # print(y_pred)\n",
    "\n",
    "        # Compute loss\n",
    "        loss = criterion(y_pred, y)\n",
    "        losses.append(loss.item())\n",
    "\n",
    "        # Backward pass\n",
    "        loss.backward()\n",
    "\n",
    "        # Update parameters\n",
    "        optimizer.step()\n",
    "\n",
    "        # Reset gradients\n",
    "        optimizer.zero_grad() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1cb9e25b410>]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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+XbkyBHF4/GsiylJdXV1evfdd8epVafXkiVL9Mgjj2ju3Lk6dOiQ7r33Xn384x/Xjh071N7eLq/Xq4qKiqyvqaurU3t7+/g0+DRKPabRnv/Ube3t7aqtrc263e12q7KyctJck6uvvlrXX3+9WlpatGfPHn3rW9/S8uXLtXHjRrlcrkl1DRKJhO666y5ddtllmj9/viRZet23t7eP+jpJ3TaRjHYNJOkv//IvNXPmTDU2Nmr79u36xje+oZ07d+pXv/qVpIl/Dd588021trYqFAqprKxMTz75pM477zxt27Ztyjz/J7oG0pn1/E/68DEVLV++PP3/BQsWaMmSJZo5c6Z++ctfqri4eBxbhvHyuc99Lv3/Cy64QAsWLNBZZ52l9evX66qrrhrHluXfqlWrtGPHDr300kvj3ZRxc6JrcOutt6b/f8EFF6ihoUFXXXWV9uzZo7POOqvQzcy7uXPnatu2berp6dETTzyhlStXasOGDePdrII60TU477zzzqjnf9J3u1RXV8vlch03qrmjo0P19fXj1KrCqqio0DnnnKPdu3ervr5ekUhE3d3dWedM1uuRekwne/7r6+vV2dmZdXssFtPRo0cn5TWRpNmzZ6u6ulq7d++WNHmuwR133KFf//rX+sMf/qAZM2akj1t53dfX14/6OkndNlGc6BqMZsmSJZKU9TqYyNfA6/Vqzpw5WrRokdasWaOFCxfqxz/+8ZR6/k90DUYzns//pA8fXq9XixYt0rp169LHEomE1q1bl9UPNpn19fVpz549amho0KJFi+TxeLKux86dO7Vv375JeT1aWlpUX1+f9XiDwaA2b96cfrytra3q7u7W1q1b0+e88MILSiQS6R/OyWb//v3q6upSQ0ODpIl/DYwxuuOOO/Tkk0/qhRdeUEtLS9btVl73ra2tevPNN7NC2O9//3v5/f502fpMdqprMJpt27ZJUtbrYCJfg5ESiYTC4fCUeP5PJHUNRjOuz39eh6+eoR577DHj8/nMI488Yt5++21z6623moqKiqwRvZPJV77yFbN+/Xqzd+9e86c//cksXbrUVFdXm87OTmNMcspZc3OzeeGFF8yWLVtMa2uraW1tHedW29fb22tef/118/rrrxtJ5oc//KF5/fXXzYcffmiMSU61raioME8//bTZvn27ufbaa0edavuRj3zEbN682bz00kvm7LPPnjDTTI05+TXo7e01X/3qV83GjRvN3r17zX/+53+aiy66yJx99tkmFAql72MiX4Pbb7/dBAIBs379+qxphAMDA+lzTvW6T00z/NSnPmW2bdtmnn/+eVNTUzNhplqe6hrs3r3b3HfffWbLli1m79695umnnzazZ882l19+efo+JvI1+OY3v2k2bNhg9u7da7Zv326++c1vGofDYX73u98ZYyb/82/Mya/Bmfb8T4nwYYwxP/3pT01zc7Pxer3mkksuMZs2bRrvJp02N9xwg2loaDBer9dMnz7d3HDDDWb37t3p2wcHB80Xv/hFM23aNFNSUmI++9nPmkOHDo1ji3Pzhz/8wUg67mPlypXGmOR0229/+9umrq7O+Hw+c9VVV5mdO3dm3UdXV5f5/Oc/b8rKyozf7zc33XST6e3tHYdHY8/JrsHAwID51Kc+ZWpqaozH4zEzZ840t9xyy3HheyJfg9EeuyTz8MMPp8+x8rr/4IMPzPLly01xcbGprq42X/nKV0w0Gi3wo7HnVNdg37595vLLLzeVlZXG5/OZOXPmmK997WtZ6zwYM3GvwV//9V+bmTNnGq/Xa2pqasxVV12VDh7GTP7n35iTX4Mz7fl3GGNMfmspAAAAJzbpx3wAAIAzC+EDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAUFOEDAAAU1P8PheX6z/FidtUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(losses) # 此处应观察到损失值整体上成下降态势"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "final model:  -1.2302279472351074 * x1 +  10.320243835449219  * x2 +  -2.031217336654663  = 0\n"
     ]
    }
   ],
   "source": [
    "print(\"final model: \", model.state_dict()['linear.weight'][0][0].item(), '* x1 + ', model.state_dict()['linear.weight'][0][1].item(), ' * x2 + ', model.state_dict()['linear.bias'][0].item(), ' = 0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1cb9e37dcd0>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the decision boundary: two points, draw a line between\n",
    "# Decision boundary occurs when h = 0, or when\n",
    "# theta0 + theta1*x1 + theta2*x2 = 0\n",
    "# y=ax+b is replaced by x2 = (-1/theta2)(theta0 + theta1*x1)\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "# boundary_xs = np.array([torch.min(dataset.X[:,0]), torch.max(dataset.X[:,0])])\n",
    "# 使用 numpy 的 min 和 max 函数\n",
    "min_x = np.min(dataset.X[:,0])\n",
    "max_x = np.max(dataset.X[:,0])\n",
    "\n",
    "# 创建一个包含最小值和最大值的 torch.Tensor\n",
    "boundary_xs = torch.tensor([min_x, max_x])\n",
    "boundary_ys = (-1./model.state_dict()['linear.weight'][0][1].item())*(model.state_dict()['linear.bias'][0].item() + model.state_dict()['linear.weight'][0][0].item()*boundary_xs) \n",
    "\n",
    "plotData()\n",
    "plt.plot(boundary_xs,boundary_ys,'k-.',label='Decision Boundary')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
